package br.com.swp.campestre.entity;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Version;

import org.hibernate.validator.Email;
import org.hibernate.validator.NotEmpty;
import org.hibernate.validator.NotNull;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;


//@Name("cliente")
@Entity
@Scope(ScopeType.CONVERSATION)
@AutoCreate
@Name("clientePF")
@Table(name="cliente_pf")
@SequenceGenerator(sequenceName="Cliente_seq" ,  name="Cliente_seq" , allocationSize=1)
/*
 * OBS
 * A sequence Cliente_seq tambem eh ulizada em ClientePJ.
 * Desta forma garantimos que clientes PF e PJ nao tenham o mesmo ID
 *   
 */
public class ClientePF implements Serializable
{

	private static final long serialVersionUID = -5737386341332903520L;
	
	private Long id;
    private int version;
    
    //Dados pessoais
    private String nome;
    private Date dataNascimento;
    private String sexo; //valores permitidos (MASCULINO, FEMININO)
    private String nascionalidade;
    private String estadoCivil; //valores permitidos (SOLTEIRO, CASADO, SEPARADO, DIVORCIADO, VIUVO)
    private String cpf; //Campo gravado com mascara ex: 999.999.999-99
    private String rg;
    private String profissao;
    
    //Endereco
    private String logradouro;
    private Integer numero;
    private String complemento;
    private String bairro;
    private String cep;
    
    //Contato
    private String email;
    private String fone1; // fones ja gravados com o DDD e mascara. ex. (85)9999-9999 
    private String fone2;
    private String fone3;
    private Cidade cidade;
    

    @Id @GeneratedValue(strategy=GenerationType.SEQUENCE , generator="Cliente_seq")
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Version
    public int getVersion() {
        return version;
    }

    private void setVersion(int version) {
        this.version = version;
    }

    @NotNull
    @NotEmpty
    @Column(length=100)
	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	@Temporal(TemporalType.DATE)
	public Date getDataNascimento() {
		return dataNascimento;
	}

	public void setDataNascimento(Date dataNascimento) {
		this.dataNascimento = dataNascimento;
	}

	
	@NotNull
	@NotEmpty
	@Column(length=10) //valores permitidos (MASCULINO, FEMININO)
	public String getSexo() {
		return sexo;
	}

	public void setSexo(String sexo) {
		this.sexo = sexo;
	}

	@Column(length=30)
	public String getNascionalidade() {
		return nascionalidade;
	}

	public void setNascionalidade(String nascionalidade) {
		this.nascionalidade = nascionalidade;
	}

	@Column(length=10)  //valores permitidos (SOLTEIRO, CASADO, SEPARADO, DIVORCIADO, VIUVO)
	public String getEstadoCivil() {
		return estadoCivil;
	}

	public void setEstadoCivil(String estadoCivil) {
		this.estadoCivil = estadoCivil;
	}

	@NotNull
	@NotEmpty
	@Column(length=14) //Campo gravado com mascara ex: 999.999.999-99
	public String getCpf() {
		return cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	@NotNull
	@NotEmpty
	@Column(length=20)
	public String getRg() {
		return rg;
	}

	public void setRg(String rg) {
		this.rg = rg;
	}

	
	@Column(length=30)
	public String getProfissao() {
		return profissao;
	}

	public void setProfissao(String profissao) {
		this.profissao = profissao;
	}

	@Column(length=50)
	public String getLogradouro() {
		return logradouro;
	}

	public void setLogradouro(String logradouro) {
		this.logradouro = logradouro;
	}

	public Integer getNumero() {
		return numero;
	}

	public void setNumero(Integer numero) {
		this.numero = numero;
	}

	@Column(length=30)
	public String getComplemento() {
		return complemento;
	}

	public void setComplemento(String complemento) {
		this.complemento = complemento;
	}

	@Column(length=30)
	public String getBairro() {
		return bairro;
	}

	public void setBairro(String bairro) {
		this.bairro = bairro;
	}

	@Column(length=10)
	public String getCep() {
		return cep;
	}

	public void setCep(String cep) {
		this.cep = cep;
	}

	@Email
	@Column(length=50)
	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}


	@NotNull
	@NotEmpty
	@Column(length=13)
	public String getFone1() {
		return fone1;
	}

	public void setFone1(String fone1) {
		this.fone1 = fone1;
	}

	@Column(length=13)
	public String getFone2() {
		return fone2;
	}

	public void setFone2(String fone2) {
		this.fone2 = fone2;
	}

	@Column(length=13)
	public String getFone3() {
		return fone3;
	}

	public void setFone3(String fone3) {
		this.fone3 = fone3;
	}
	
	@ManyToOne
	public Cidade getCidade() {
		return cidade;
	}

	public void setCidade(Cidade cidade) {
		this.cidade = cidade;
	}

}